package cn.itcast.bos.web.action.take_delivery;

import cn.itcast.bos.utils.BaseAction;
import com.opensymphony.xwork2.ActionContext;
import org.apache.commons.io.FileUtils;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.ParentPackage;
import org.apache.struts2.convention.annotation.Result;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import java.io.File;
import java.io.IOException;
import java.rmi.server.ServerCloneException;
import java.text.SimpleDateFormat;
import java.util.*;

@Namespace("/")
@ParentPackage("json-default")
@Scope("protoType")
@Controller
public class ImageAction extends BaseAction<Object> {

    private File imgFile;
    private String imgFileFileName;
    private String imgFileContentType;

    public void setImgFile(File imgFile) { this.imgFile = imgFile; }

    public void setImgFileFileName(String imgFileFileName) { this.imgFileFileName = imgFileFileName; }

    public void setImgFileContentType(String imgFileContentType) { this.imgFileContentType = imgFileContentType; }

    //图片上传的方法
    @Action(value = "image_upload",results = {@Result(name = "success",type = "json")})
    public String ImageUpload(){
        /*System.out.println(imgFile);
        System.out.println(imgFileFileName);
        System.out.println(imgFileContentType);*/
        //得到文件上传的保存路径(绝对路径)
        String savePath= ServletActionContext.getServletContext().getRealPath("/upload/");
        //得到相对路径
        String saveUrl = ServletActionContext.getServletContext().getContextPath()+"/upload/";
       /* System.out.println("savePath:"+savePath);
        System.out.println("saveUrl:"+saveUrl);*/

        //生成随机图片名称
        UUID uuid = UUID.randomUUID();
        String ext = imgFileFileName.substring(imgFileFileName.lastIndexOf("."));
        String randomFileName=uuid+ext;
        //保存图片(绝对路径)
        File destFile = new File(savePath+"/"+randomFileName);
        try {
            FileUtils.copyFile(imgFile,destFile);
            //通知浏览器保存成功
            Map<String,Object> result = new HashMap<>();
            result.put("error",0);
            result.put("url",saveUrl+randomFileName);
            ActionContext.getContext().getValueStack().push(result);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return SUCCESS;

    }
    @Action(value = "image_manager",results = {@Result(name="success",type = "json")})
    public String manage() {
        // 根目录路径，可以指定绝对路径，比如 d:/xxx/upload/xxx.jpg
        String rootPath = ServletActionContext.getServletContext().getRealPath(
                "/")
                + "upload/";
        // 根目录URL，可以指定绝对路径，比如 http://www.yoursite.com/attached/
        String rootUrl = ServletActionContext.getRequest().getContextPath()
                + "/upload/";

        // 遍历目录取的文件信息
        List<Map<String, Object>> fileList = new ArrayList<Map<String, Object>>();
        // 当前上传目录
        File currentPathFile = new File(rootPath);
        // 图片扩展名
        String[] fileTypes = new String[] { "gif", "jpg", "jpeg", "png", "bmp" };

        if (currentPathFile.listFiles() != null) {
            for (File file : currentPathFile.listFiles()) {
                Map<String, Object> hash = new HashMap<String, Object>();
                String fileName = file.getName();
                if (file.isDirectory()) {
                    hash.put("is_dir", true);
                    hash.put("has_file", (file.listFiles() != null));
                    hash.put("filesize", 0L);
                    hash.put("is_photo", false);
                    hash.put("filetype", "");
                } else if (file.isFile()) {
                    String fileExt = fileName.substring(
                            fileName.lastIndexOf(".") + 1).toLowerCase();
                    hash.put("is_dir", false);
                    hash.put("has_file", false);
                    hash.put("filesize", file.length());
                    hash.put("is_photo", Arrays.<String> asList(fileTypes)
                            .contains(fileExt));
                    hash.put("filetype", fileExt);
                }
                hash.put("filename", fileName);
                hash.put("datetime",
                        new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(file
                                .lastModified()));
                fileList.add(hash);
            }
        }
        Map<String, Object> result = new HashMap<String, Object>();
        result.put("moveup_dir_path", "");
        result.put("current_dir_path", rootPath);
        result.put("current_url", rootUrl);
        result.put("total_count", fileList.size());
        result.put("file_list", fileList);
        ActionContext.getContext().getValueStack().push(result);

        return SUCCESS;
    }
}
